// CameraManager.ts - 挂在相机节点上
import { _decorator, Component, log, Node, Vec3 } from 'cc';

@_decorator.ccclass('CameraManager')
export class CameraManager extends Component {
    @_decorator.property(Node)
    target: Node | null = null;  // 将要跟随的精灵拖到这里
    
    @_decorator.property
    followSpeed: number = 5;     // 跟随速度
    

    // 需要固定世界位置的节点
    @_decorator.property([Node])
    worldStaticNodes: Node[] = [];
   
 // 记录节点的世界位置
    private _nodeWorldPositions: Map<Node, Vec3> = new Map();
    
    onLoad() {
        // 记录节点的初始世界位置
        for (const node of this.worldStaticNodes) {
            this._nodeWorldPositions.set(node, node.worldPosition.clone());
        }
        log(this._nodeWorldPositions,this.worldStaticNodes,858585);
    }
    updateWorldStaticNodes() {
        for (const [node, worldPos] of this._nodeWorldPositions) {
            // 计算节点相对于相机的局部位置
            const cameraWorldPos = this.node.worldPosition;
            const localX = worldPos.x - cameraWorldPos.x;
            const localY = worldPos.y - cameraWorldPos.y;
            
            // 设置节点的局部位置
            node.position = new Vec3(localX, localY, node.position.z);
        }
       // log(this._nodeWorldPositions,1);
    }
    
   // 动态添加需要固定世界位置的节点
    addWorldStaticNode(node: Node) {
        // 使用 indexOf 替代 includes
        let found = false;
        for (let i = 0; i < this.worldStaticNodes.length; i++) {
            if (this.worldStaticNodes[i] === node) {
                found = true;
                break;
            }
        }
        
        if (!found) {
            this.worldStaticNodes.push(node);
            this._nodeWorldPositions.set(node, node.worldPosition.clone());
        }
    }
    
    // 移除节点
    removeWorldStaticNode(node: Node) {
        for (let i = 0; i < this.worldStaticNodes.length; i++) {
            if (this.worldStaticNodes[i] === node) {
                this.worldStaticNodes.splice(i, 1);
                this._nodeWorldPositions.delete(node);
                break;
            }
        }
    }
    update() {
        if (!this.target) return;
        
        // 获取目标位置
        const targetPos = this.target.position;
        // 获取当前相机位置
        const currentPos = this.node.position;


        
        // 平滑移动到目标位置
        // const newPos = new Vec3(
        //     currentPos.x + (targetPos.x - currentPos.x) * this.followSpeed * 0.01,
        //     currentPos.y + (targetPos.y - currentPos.y) * this.followSpeed * 0.01,
        //     currentPos.z  // 保持Z轴不变
        // );
        
        // this.node.position = newPos;

        //这里不要平滑移动，直接移动到目标位置
        this.node.position = new Vec3(
            targetPos.x,
            targetPos.y,
            this.node.position.z  // 保持相机原有的Z轴
        );

    // 更新静态节点，保持它们在世界坐标中的位置
        this.updateWorldStaticNodes();


    }
}